/*
 * VotantesParser.cpp
 *
 *  Created on: Oct 9, 2011
 *      Author: lore
 */

#include "VotoAutomaticoParser.h"

VotoAutomaticoParser::VotoAutomaticoParser() {
}

VotoAutomaticoParser::~VotoAutomaticoParser() {
}

vector<Voto> VotoAutomaticoParser::parse(string filePath, unsigned long* registrosOK, unsigned long* registrosFAIL) {
	vector<Voto> votosParseados;

	(*registrosFAIL) = 0;
	(*registrosOK) = 0;

	fstream _file;
	_file.open(filePath.c_str(),ios::out | ios::in);

	if (!_file.is_open()) {
	}
	else {
		string aLine; // Se lee archivo linea por linea
		while (getline(_file, aLine)) {
			unsigned long votante;
			unsigned long clave;
			unsigned long eleccion;
			unsigned long lista;

			// limpio "aLine
			StringUtils su;
			aLine = su.replaceAllOccurences(aLine,"\r"," ");
			aLine = su.replaceAllOccurences(aLine,"\n"," ");
			su.trim(aLine);

			if (aLine.length() == 0) {
				continue;
			}


			size_t separator = aLine.find_first_of('|', 0);	
			if (separator == string::npos) {
				(*registrosFAIL)++;
				continue;
			}

			string dniText = aLine.substr(0,separator);
			
			size_t separator2 = aLine.find_first_of('|', separator+1);	
			string claveText = aLine.substr(separator + 1,separator2 - separator -1);
			
			separator = aLine.find_first_of('|', separator2+1);
			string eleccionText = aLine.substr(separator2+1,separator-separator2-1);
			
			string listaText = aLine.substr(separator+1);
			
			// Crea el objeto Votante
			votante = strtoul(dniText.c_str(),NULL,0);
			//clave = strtoul(claveText.c_str(), NULL,0);
			eleccion = strtoul(eleccionText.c_str(), NULL,0);
			lista = strtoul(listaText.c_str(), NULL,0);

			// cero no es un ID Valido...los IDs empiezan en 1. Cero es el codigo de error de struol
			if (votante <= 0) { // tb tengo que fijarme que el id de id de distrito este ok.
				(*registrosFAIL)++;
				continue;
			}

			Voto voto;

			voto.setClave(claveText);
			voto.setEleccionId(eleccion);
			voto.setListaId(lista);
			voto.setVotanteId(votante);

			votosParseados.push_back(voto);
		}
	}
	return votosParseados;
}


